#include <iostream>
#include <string>
#include "client_socket.h"
#include "client_thread.h"
#include "../Vista/ControllerSDL.h"
#include "../Vista/Menu.h"
#define TAM_RESPUESTA 100
#define PORT 4321
#define LARGO 5
using std::string;
using std::cout;
using std::endl;

/* MAIN DE PRUEBA: envia y recibe un mensaje. Imprime mensaje. */

int main(int argc, char *argv[]){
	const char* ip = "127.0.0.1";
	Client_socket socket = Client_socket(PORT,(char*) ip);
	Client_thread thread_recv = Client_thread(&socket);
        if(socket.conectar() == -1){
            return -1;
	}
        string buffer;
        bool iniciarPartida = false;
        /* Bucle principal donde elige opciones de menu. */
        /* El string correspondiente deberia ser creado dentro del detector de teclas
         * entonces obtengo con getString el buffer a enviar. */
        while (iniciarPartida == false){
            /* Si crearPartida == true: <largo>|C|<NombreJugador>|<NombrePartida>*/
            /* Si mostrarPartida == true: <largo>|M */
            /* Si unirseAPartida == true: <largo>|U|<idPartida>|<nombreJugador>*/
            /* Si salir == true: <largo>|S */
            /* Si IniciarPartida == true <largo>|I */
            /* Si elegirCampania == true: <largo>|N|<nroDeCampania> */
            
//            ControllerSDL master;
//            Menu menu("Menu - Bomberman vs Plantas vs Zombies");
//            menu.run();            
//            if (!menu.getInstrucciones().empty()){
//               buffer = menu.getInstrucciones().front();
//               menu.getInstrucciones().pop();
//            }
            cout<<"bufferdelqueue:"<<buffer<<endl;
            //enviar:
            int tam = buffer.size();
            socket.enviar(buffer,tam);
            //recibir:
            string largoALeer;			
            int cantbytes;
            if ((cantbytes = socket.recibir(&largoALeer, LARGO)) == -1){
                cout<<"client_thread"<<endl;
            }           
            cout<<"client_thread-largorecibido: "<<largoALeer;
            int largo = stoi(largoALeer);
            //Leer la cantidad de bytes que dice el largo.
            string buffer;			
            int numbytes;
            if ((numbytes = socket.recibir(&buffer, largo)) == -1){
                cout<<"client_thread recibir"<<endl;
            }
           cout<<"client_thread-bufferrecibido: "<<buffer;
        }
        
	//recibir tileMap:
	//thread_recv.iniciar();
	
	//join:
	//thread_recv.join();
	socket.cerrar_conexion();
	socket.cerrar();
	return 0;
}
